home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / forge20.zip / EXTPROC3.PAS < prev    next >
Pascal/Delphi Source File  |  1993-01-04  |  5KB  |  192 lines

  1. Procedure Review_Next_Rec;
  2. Begin
  3.   Blank_Fields;
  4.   If Not EOF(Output_File) Then Begin
  5.     Current_File_Pos:= Current_File_Pos+1;
  6.     Read_Record_and_Write_It;
  7.     End
  8.   Else Begin  {it is EOF}
  9.     Sound(1000);
  10.     Delay(200);
  11.     Nosound;
  12.     Current_File_Pos:= FileSize(Output_File)+1;
  13.     Write_Init_Val;
  14.     End;
  15.   Write_Recno;
  16.   End; { procedure review_next_rec }
  17.  
  18.  
  19. Procedure Goto_RecNo;
  20.  
  21. Var
  22.   Key:              Char;
  23.   Goto_File_Pos:    String[6];
  24.  
  25. Begin
  26.   TextBackground(LightGray);
  27.   TextColor(Black);
  28.   GotoXY(41,25);
  29.   Write('      ');
  30.   GotoXY(41,25);
  31.   Repeat
  32.     Repeat
  33.       Read(Kbd, Key);
  34.     Until Key <> Chr(0);
  35.     If Key in ['0'..'9'] Then Begin
  36.       Goto_File_Pos:= Goto_File_Pos + Key;
  37.       Write(Key);
  38.       End;
  39.   Until Key = Chr(13);
  40.   Val(Goto_File_Pos, Current_File_Pos, ErrorPos);
  41.   If ErrorPos = 0 Then Begin
  42.     If ((Current_File_Pos > 0)
  43.            and not (Current_File_Pos > FileSize(Output_File))) Then Begin
  44.       Read_Record_and_Write_It;
  45.       Write_RecNo;
  46.       End
  47.     Else Begin  {current_file_pos is > filesize}
  48.       Sound(5000);
  49.       Delay(150);
  50.       NoSound;
  51.       Current_File_Pos:= FileSize(Output_File);
  52.       Read_Record_and_Write_It;
  53.       Write_RecNo;
  54.       End;
  55.     End { if errorpos = 0 }
  56.   Else Goto_RecNo;
  57. End; { procedure goto_recno }
  58.  
  59.  
  60.  
  61.  
  62. Procedure Write_To_Output_File;
  63.  
  64. Begin
  65.   Seek(Output_File,Current_File_Pos-1);
  66.   Write(Output_File,Output_Record);
  67.   If not EOF(Output_File) Then Begin
  68.     Banner_Line;
  69.     Review_Next_Rec;
  70.     End
  71.   Else Begin  {it is EOF}
  72.     Current_File_Pos:= FilePos(Output_File)+1;
  73.     Banner_Line;
  74.     Write_Recno;
  75.     End;
  76.   End; { procedure write_to_output_file }
  77.  
  78.  
  79.  
  80. Procedure Delete_Rec;
  81.  
  82. Begin
  83.   If Output_Record.Delete <> 'X' Then
  84.     Output_Record.Delete:= 'X'
  85.   Else Output_Record.Delete:= ' ';
  86.   Write_To_Output_File;
  87. End;
  88.  
  89.  
  90. Procedure BackUp;
  91.  
  92. Var
  93.          EXISTS: Boolean;
  94.  
  95. Begin
  96.   Close(Output_File);
  97.   i:= 1;
  98.   BackUp_File_Name:= '';
  99.   While ((i < 9) and not (Copy(File_Name,i,1) = '.')) Do Begin
  100.     BackUp_File_Name:= BackUp_File_Name + Copy(File_Name,i,1);
  101.     i:= i+1;
  102.     End;
  103.   BackUp_File_Name:= BackUp_File_Name + '.bak';
  104.   If NOT (Backup_File_Name = File_Name) Then Begin
  105.     Assign(Old_File, Backup_File_Name);       { purge the oldest .bak file  }
  106.     {$I-} Erase(Old_File) {$I+}; EXISTS:= (IOresult = 0); { force continuation }
  107.     Assign(Old_File, File_Name);              { orig. file becomes .bak file }
  108.     Rename(Old_File, Backup_File_Name);
  109.     Assign(New_OutPut_File, File_Name);       { new file gets the orig. name }
  110.     Rewrite(New_OutPut_File);
  111.     Reset(Old_File);
  112.     While not EOF(Old_File) Do Begin
  113.       Read(Old_File, Output_Record);          { copy all records except the  }
  114.       If Output_Record.Delete <> 'X'Then         { deleted ones from the .bak   }
  115.         Write(New_Output_File, Output_Record);   { file to the new file         }
  116.       End;
  117.     Close (New_Output_File);
  118.     Close (Old_File);
  119.     Assign(Output_File, File_Name);
  120.     Reset(Output_File);
  121.     Current_File_Pos:= FileSize(Output_File);
  122.     Blank_Fields;
  123.     Read_Record_and_Write_It;
  124.     Write_RecNo;
  125.     End {if back_up_name <> file_name}
  126.   Else Begin {back_up_name does = file_name}
  127.     Sound (1000);
  128.     Delay (200);
  129.     NoSound;
  130.     GotoXY (2,25); TextColor(Black);
  131.     TextBackGround(LightGray);
  132.     For i:= 1 to 65 Do Write (Chr(32));
  133.     GotoXY (2,25);
  134.     Write ('Cannot Backup ".bak" Files');
  135.     End; {back_up_name does = file_name}
  136. End; { procedure backup }
  137.  
  138.  
  139.  
  140.  
  141.  
  142. Procedure ReadKbd;
  143.  
  144. Var
  145.      Key1, Key         :Char;
  146.      X1, X2            :Byte;
  147.  
  148. Begin
  149.   Repeat
  150.     X1:= 0;
  151.     X2:= 0;
  152.     Repeat
  153.       Read(Kbd,Key1);
  154.     Until Key1 <> Chr(0);
  155.     X1:= Ord(Key1);
  156.     Key1:= Chr(X1);
  157.     Case X1 of
  158.            27: Begin
  159.                Read(Kbd,Key);
  160.                X2:= Ord(Key);
  161.                  Case X2 of
  162.                      59: Done_Adding:= True;  {f1}
  163.                      60: Review_Prev_Rec;     {f2}
  164.                      61: Review_Next_Rec;     {f3}
  165.                      62: Delete_Rec;          {f4}
  166.                      63: Goto_RecNo;          {f5}
  167.                      66: BackUp;              {f8}
  168.                      77: RT1;                 {rt arrow}
  169.                      75: LT1;                 {lt arrow}
  170.                      {83: Left_Shift_Buffer;}  { del key }
  171.                  End;
  172.                End;
  173.            Else If Key1 = Chr(8) Then  {bs key}
  174.                  Begin
  175.                  LT1;
  176. {                 Left_Shift_Buffer;          }
  177.                  End
  178.            Else If ((Key1 = Chr(9)) or (Key1 = Chr(13))) Then   {tab or ret key}
  179.                  Tab
  180.            Else Begin
  181.                  Write(Key1);
  182.                  ScrBuf[XY]:= Key1;
  183.                  Rt1;
  184.                  End;
  185.     End;
  186.   Until ((Key = Chr(68)) or (Key = Chr(59))); { f0 or f1 key }
  187. Output_Record.Delete:= Chr(32);
  188. Output_Record.CR:= Chr(13);
  189. Done_Reading_Kbd:= True;
  190. End;     { procedure readkbd }
  191. 
  192.